// 后端开发就是 MVC + router
const Koa = require('koa');
const Router = require('koa-router'); // koa 框架的路由中间件
const server = require('koa-static'); // koa 框架的静态服务器中间件
const koaBody = require('koa-body'); // 处理 body 请求的 koa 中间件

const path = require('path');
const fs = require('fs');

const tinify = require('tinify'); // 压缩文件的第三方模块，需要获取在 tinify 的官网获得 key 后使用；
const zlib = require( 'zlib' ) // zlib是一个压缩包的内置模块
tinify.key = 'WmG89ZPmyvvWFmtNW9L3CC6JcTpP7tTL';

let filepath; // 用来存上传的文件地址

let app  = new Koa();
let home = server(path.join(__dirname,"/public/")); //指明静态资源的根目录，访问 '/' 时会默认访问 /public/index.html 
let router = new Router();
let koabody = koaBody({
    multipart:true, /* 指明body里有附件 */
    formidable: {
        maxFileSize:200*1024*1024 /*限制上传的文件的大小*/
    }
})


// 挂载静态服务器中间件
app.use(home);

// 挂载处理请求体的中间件
app.use(koabody);


// 配置路由
router.post('/uploadPic',async (ctx) => {
    // 写入文件
    console.log('-----request-----',ctx.request);
    const file = ctx.request.files.file;
    console.log('---files----',ctx.request.files);

    const reader = fs.createReadStream(file.path); // 这样也能创建可读流吗,egg能从ctx中获取文件流ctx.getFileStream();koa中可以吗？

    const myData = new Date();

    const newFilename = myData.getTime() + '.' + file.name.split('.')[1];

    const targetPath = path.join(__dirname,`./public/image/${newFilename}`);

    const upStream = fs.createWriteStream(targetPath);

    reader.pipe(upStream);

    // console.log(newFilename);

    // 将文件地址赋值给全局变量filepath
    filepath = targetPath;

    ctx.body = '上传成功'; // 
    
} )

router.get('/zipimg',ctx => {

    // 使用 tinify 压缩文件并存回
    let source = tinify.fromFile(filepath);
    source.toFile(filepath);

    

    ctx.body = '压缩成功';

})
// 挂载 路由中间件
app.use(router.routes()) 
    .use(router.allowedMethods()); // 指明允许所有方法


app.listen(6300,() =>  {
    console.log('服务运行起来了');
})